//package com.demo.util;
//
//import com.demo.sortcsv.domain.User;
//import com.google.common.collect.Lists;
//import org.apache.spark.SparkContext;
//import org.apache.spark.api.java.function.MapFunction;
//import org.apache.spark.sql.*;
//import org.apache.spark.sql.api.java.UDF1;
//import org.apache.spark.sql.types.DataTypes;
//
//import java.util.List;
//
///**
// * @author jasper
// */
//public class IsEmptyUDF implements UDF1<Object, Object> {
//
//    @Override
//    public Object call(Object type) throws Exception {
//        boolean isNull = false;
//        if (type == null) {
//            isNull = true;
//        } else {
//            if (type instanceof String) {
//                String str = (String) type;
//                if (str.length() == 0) {
//                    isNull = true;
//                }
//            }
//        }
//        return isNull;
//    }
//
//    public static void main(String[] args) {
//        final SparkSession spark = SparkSession.builder()
//                .appName("IsEmptyUDF")
//                .master("local[*]")
//                .getOrCreate();
//
//        List<Object> list = Lists.newArrayList();
//        list.add(10);
//        list.add("lisi");
//        list.add(18);
//        list.add(95.5D);
//        SparkContext context = spark.sparkContext();
////        JavaSparkContext javaSparkContext = JavaSparkContext.fromSparkContext(context);
////        JavaRDD<Object> objectJavaRDD = javaSparkContext.parallelize(list);
//        Dataset<Row> rowDataset = spark.read().text("/Users/jasper/work/git/demo/user.txt");
//        Encoder<User> userEncoder = Encoders.bean(User.class);
//        Dataset<User> userDataset = rowDataset.map(new MapFunction<Row, User>() {
//            @Override
//            public User call(Row row) throws Exception {
//                String rowString = row.toString();
//                // 去除 [
//                rowString = rowString.substring(1, rowString.length() - 1);
//                String[] split = rowString.split(",");
//                User user = new User();
//                String s = split[0];
//                user.setId("".equals(s) ? null : Integer.valueOf(split[0]));
//                user.setName(split[1]);
//                s = split[2];
//                user.setAge("".equals(s) ? null : Integer.valueOf(split[2]));
//                s = split[3];
//                user.setScore("".equals(s) ? null : Double.valueOf(split[3]));
//
//                return user;
//            }
//        }, userEncoder);
//        try {
//            userDataset.createTempView("user");
//        } catch (AnalysisException e) {
//            e.printStackTrace();
//        }
//        Dataset<Row> sql = spark.sql("select * from user");
//        sql.show();
////        StructType userSchema = DataTypes.createStructType(Arrays.asList(
////                DataTypes.createStructField("id", DataTypes.IntegerType, true),
////                DataTypes.createStructField("name", DataTypes.StringType, true),
////                DataTypes.createStructField("age", DataTypes.IntegerType, true),
////                DataTypes.createStructField("score", DataTypes.DoubleType, true)
////        ));
////
////        JavaRDD<User> userJavaRDD = userDataset.javaRDD();
////        Dataset<Row> dataFrame = spark.createDataFrame(userJavaRDD, userSchema);
////        dataFrame.show();
////        dataFrame.registerTempTable("user");
//
//        SQLContext sqlContext = spark.sqlContext();
//        IsEmptyUDF isEmptyUDF = new IsEmptyUDF();
//        sqlContext.udf().register("isEmptyUDF", isEmptyUDF, DataTypes.BooleanType);
//
//        Dataset<Row> dataset = spark.sql("select isEmptyUDF(id) from user");
//        dataset.show();
//
//    }
//}
